package com.glela.goods.dao;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.glela.goods.dao.vo.LimitSaleGoodsInventroy;
import com.glela.goods.model.Inventory;

/**
 * @author liujie
 * @2016年10月20日
 */
public interface InventoryDao {

	/**
	 * <dl>
	 * <dt>查询库存</dt>
	 * </dl>
	 * @param productId
	 * @return Inventory
	 * @author zls
	 * @date 2017年7月12日 上午10:42:05
	 */
	Inventory selectInventoryByProductId(long productId);

	/**
	 * <dl>
	 * <dt>分时抢购商品库存（取分时限购数与实际库存的最小值累加）</dt>
	 * </dl>
	 * @param limitTimeSaleId 分时抢购ID
	 * @param goodsId 商品ID
	 * @return long 可用库存
	 * @author zls
	 * @date 2017年8月1日 上午10:55:49
	 */
	long selectLimitSaleInventoryByGoodsId(int limitTimeSaleId, long goodsId);

	/**
	 * <dl>
	 * <dt>查询商品库存记录</dt>
	 * </dl>
	 * @param goodsId 商品ID
	 * @return List<Inventory>
	 * @author zls
	 * @date 2017年8月3日 下午2:48:42
	 */
	List<Inventory> selectByGoodsId(long goodsId);

	/**
	 * <dl>
	 * <dt>查询商品库存记录</dt>
	 * </dl>
	 * @param goodsId 商品ID
	 * @param status 库存状态 0：禁用；1：可用
	 * @return List<Inventory>
	 * @author zls
	 * @date 2017年8月3日 下午2:48:42
	 */
	List<Inventory> selectByGoodsId(long goodsId, Integer status);

	/**
	 * <dl>
	 * <dt>批量查询商品库存明细</dt>
	 * </dl>
	 * @param goodsIds 商品ID集合
	 * @param status 库存状态 0：禁用；1：可用
	 * @return List<Inventory>
	 * @author zls
	 * @date 2017年8月3日 下午6:11:14
	 */
	Map<Long, Set<Inventory>> selectByGoodsIds(Collection<Long> goodsIds, int status);

	/**
	 * <dl>
	 * <dt>批量查询分时抢购商品总库存</dt>
	 * </dl>
	 * @param limitSaleGoodsIdMap key:分时抢购ID，value:分时抢购下的商品ID集合
	 * @return LimitSaleGoodsInventroy
	 * @author zls
	 * @date 2017年8月1日 下午5:12:50
	 */
	LimitSaleGoodsInventroy selectLimitSaleInventoryByGoodsId(Map<Integer, Set<Long>> limitSaleGoodsIdMap);

	public Inventory selectInventoryByGoodsStoreIdSpecInfo(long goodsId, int storeId, String specInfo);

	/**
	 * <dl>
	 * <dt>批量查询库存</dt>
	 * </dl>
	 * @param inventoryIdSet
	 * @return Map<Long,Inventory>
	 * @author zls
	 * @date 2018年1月4日 下午5:10:04
	 */
	Map<Long, Inventory> selectByIds(Collection<Long> inventoryIdSet);

}
